/*************************************************
* Title：TinyToolKit
* Author：Opportunity 
* Discribe：实现镜头的晃动感
* CreateTime：2020-05-11 10:26:59
* Version：1.0
* Modify Recoder：
*************************************************/

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace TinyToolKit
{
    [Serializable]
    public class LerpContolledBob
    {
        public float bobDuration = 0.2f; //摇晃到最大值的时间，默认这边是0.2，而完成一次摇晃需要一次下沉和上升，所以是0.4秒
        public float bobAmount = 0.1f; //摇晃的最大值
 
        private float _offset = 0f; //当前偏移值

        public float Offset()
        {
            return _offset;
        }
 
        //计算摄像机偏移值，模拟人着陆的效果
        public IEnumerator DoBobCycle()
        {
            // 摄像机轻微的下降
            float t = 0f;
            while (t < bobDuration)
            {
                _offset = Mathf.Lerp(0f, bobAmount, t/bobDuration);    //根据时间，进行一个插值运算，计算当前需要下沉的y坐标值
                t += Time.deltaTime;
                yield return new WaitForFixedUpdate();  //等待下一次FixedUpate更新完毕
            }
 
            //摄像机上升
            t = 0f;
            while (t < bobDuration)
            {
                _offset = Mathf.Lerp(bobAmount, 0f, t/bobDuration);
                t += Time.deltaTime;
                yield return new WaitForFixedUpdate();
            }
            _offset = 0f;  //归零
        }
    }
}
